package com.stefanini.pe.bbva.mbl.in.bo;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;

import com.stefanini.pe.bbva.mbl.carga.in.to.TablaPG;
import com.stefanini.pe.bbva.mbl.carga.in.to.UsuarioSesion;
import com.stefanini.pe.bbva.mbl.in.bo.iface.VisorCargaTablaBO;
import com.stefanini.pe.bbva.mbl.in.dao.iface.OrigenArchivoDAO;
import com.stefanini.pe.bbva.mbl.in.utils.Util;
import com.stefanini.pe.bbva.mbl.to.TablaTemporalTO;

public class VisorCargaTablaBOImpl implements VisorCargaTablaBO {
	private static Logger logger = Logger.getLogger(VisorCargaTablaBOImpl.class);
	OrigenArchivoDAO origenArchivoDAO;
	
	public VisorCargaTablaBOImpl(OrigenArchivoDAO origenArchivoDAO) {
		super();
		this.origenArchivoDAO = origenArchivoDAO;
	}


	public OrigenArchivoDAO getOrigenArchivoDAO() {
		return origenArchivoDAO;
	}

	public void setOrigenArchivoDAO(OrigenArchivoDAO origenArchivoDAO) {
		this.origenArchivoDAO = origenArchivoDAO;
	}

	public List selectCargaTemporalLineas(String estado,Date fechaInicial,Date fechaFinal,String strNombreTabla){
		List listaCargaLineas = null;
		try{			
			logger.info("Inicio");

			String query = "select IDTEMPORAL, FECHACARGA, ESTADOCARGA, OBSERVACIONCARGA, FECHA_PROCESO from "+strNombreTabla+" ";
			listaCargaLineas = (List)this.getOrigenArchivoDAO().selectQuery(estado,fechaInicial,fechaFinal,query);
			
			logger.info("Fin");
		}catch (Exception e) {
			logger.error(e.getMessage(), e);
		}
		
		return listaCargaLineas;
	}
	
	/*	Inicio: lpolanco - 23/05/2012	*/
	public List<TablaTemporalTO> selectCargaTemporalLineasList(String estado,Date fechaInicial,Date fechaFinal,String strNombreTabla){
		List<TablaTemporalTO> listaCargaLineas = new ArrayList<TablaTemporalTO>();
		
		try{			
			logger.info("Inicio");
			String query = "select IDTEMPORAL as idTemporal, TO_CHAR(FECHACARGA,'DD/MM/YYY HH:MM:SS') as fechaCarga, ESTADOCARGA as estadoCarga, OBSERVACIONCARGA as observacionCarga, TO_CHAR(FECHA_PROCESO,'DD/MM/YYYY') as fechaProceso, (CASE WHEN ESTADOCARGA = 'A' THEN 'True' END) AS ok, (CASE WHEN ESTADOCARGA = 'E' THEN 'True' END) AS error from "+strNombreTabla+" ";
			listaCargaLineas = this.getOrigenArchivoDAO().selectQueryList(estado,fechaInicial,fechaFinal,query);
			logger.info("Fin");
		}catch (Exception e) {
			logger.error(e.getMessage(), e);
		}
		
		return listaCargaLineas;
	}
	/*	Fin: lpolanco - 23/05/2012	*/
	
	public List selectCargaTempDetLineasLog(BigDecimal idTemporal,String strNombreTabla){
		List detalleList = null;
		
		try{
			logger.info("Inicio");
			
			String query = "select * from "+strNombreTabla+" ";
			
			detalleList = (List)this.getOrigenArchivoDAO().selectQueryDetalle(idTemporal,query);
			
			logger.info("Fin");
		}catch (Exception e) {
			logger.error(e.getMessage(), e);
		}
		
		return detalleList;
	}	
		
	public String insertAccionUsuario(String ip_usuario,
			   UsuarioSesion usuario, String fecha,
		       String pagina, String cod_area,
		       String des_area, String cod_moneda,
		       String des_moneda, String cod_unidad,
		       String des_unidad, String nivel,
		       String familia, String cliente,
		       String grupo, String contrato,String codProducto,String oficina_cliente){
		String resul = null;
		
		try{
			logger.info("Inicio");
			
			resul = this.getOrigenArchivoDAO().insertAccionUsuario(ip_usuario,usuario,fecha,pagina,cod_area,des_area,
					cod_moneda,des_moneda,cod_unidad,des_unidad,nivel,familia,cliente,grupo,contrato, codProducto,oficina_cliente);
			
			logger.info("Fin");
			
			return resul;
		}catch (Exception e) {
			logger.error(e.getMessage(), e);
			return "";
		}
	}

	public List selectTablas() {
		return origenArchivoDAO.selectTablas();
	}

	public List seleccionarUnaTabla(String nombreTabla) {
		TablaPG tablaPG = new TablaPG();
		tablaPG.setNombreTabla(nombreTabla);
		List lista = null;
		
		logger.info("Inicio");
		
		lista = origenArchivoDAO.seleccionarUnaTabla(tablaPG);
		
		logger.info("Fin");
		
		return lista;
	}
}